#coding: utf-8

import json

class BeanUtil(object): 
    """
    如果想要使用本类在类实例与json字符串之间进行序列化与反序列化，必须满足两个条件：
    1. 提供无参的__init__方法
    2. 所有成员必须是成员变量，不能包含类变量
    """

    @classmethod 
    def dumps(cls, obj): 
        return json.dumps(obj.__dict__)

    @classmethod 
    def loads(cls, json_str, clazz): 
        d = json.loads(json_str) 
        if not isinstance(d, dict): 
            raise Exception("failed convert %s" % json_str) 
        
        return cls.dict2obj(d, clazz) 

    @classmethod
    def dict2obj(cls, dict_map, clazz): 
        module = __import__(clazz.__module__) 
        klass = getattr(module, clazz.__name__) 
        instance = klass()

        # 成员变量
        for key, value in dict_map.iteritems():
            if instance.__dict__.has_key(key):
                instance.__dict__[key] = value

        return instance

